home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / tool / artemis1 / src / blot.txt < prev    next >
Encoding:
Text File  |  1994-12-14  |  1.8 KB  |  49 lines

  1. ARTemis のにじみペンですが、
  2. 「インプリメント」なんて呼べるほど大したアイデアがあるわけでは
  3. ありません(^^;)
  4.  
  5. ただ単に「でたらめな方向へ、だんだん(濃度が)薄くなりながら伸
  6. びていく」というのを何度も繰り返しているだけです。
  7. TurboGraphics の「色を画面に溜めていく」という方法よりもインチ
  8. キくさいです(爆)
  9.  
  10. 実際のアルゴリズムは、
  11.  
  12.     ---------------------------------------------------------------------
  13.     void blot_plot(int x, int y, int nBranch, int nRepeat)
  14.     // ●ランダムに伸びていく線を一本描く。
  15.     // nBranch : いくつに枝分かれするのか
  16.     // nRepeat : 何ピクセル分伸びるのか
  17.     {
  18.       deci nGrayCutRate; // 1ピクセルにつきどれだけ濃度を減らすか
  19.  
  20.       void blot_plot_sub(int x, int y, int nRepeat, deci nGrayScale)
  21.       // nRepeat : あと何ピクセル分伸びるのか
  22.       // nGrayScale : ピクセルを描画する濃度 (0:薄い ~ 256:濃い)
  23.       {
  24.         if (nRepeat <= 0 || nGrayScale <= 0)
  25.           return;
  26.         PSET(x,y, DeciToInt(nGrayScale));   // ピクセルを描画
  27.         int i;
  28.         for (i = 0; i < nBranch; i++)
  29.         {
  30.           int nx,ny;
  31.           nx = x + rand() % 3 - 1;   // ランダムに1ドット移動
  32.           ny = y + rand() % 3 - 1;
  33.           blot_plot_sub(nx, ny, nRepeat-1, nGrayScale-nGrayCutRate);
  34.           // ↑自分自身を再帰的に呼び出し、続くピクセルを描画
  35.         }
  36.       }
  37.  
  38.       nGrayCutRate = IntToDeci(50) / nRepeat;
  39.       blot_plot_sub(x,y,nRepeat,IntToDeci(50));
  40.       // (↑このへんの 50 という数値が特にインチキくさい)
  41.     }
  42.     ---------------------------------------------------------------------
  43.         (※) deci 型とは、実際には int 型で、10ビット固定小数点として扱う。
  44.  
  45. ……という具合になっています。(実際のソースプログラムはフリコレ内に入ってい
  46. て、にじみペンに関する処理は subgrp.c 580行目あたりにあります)
  47.  
  48. 松内
  49.